#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <cstdint>
#include <vector>
#include <QMainWindow>
#include <QPushButton>
#include <QtCharts/QChartView> // 用于图表显示
#include <QTreeWidget>
#include <QTextEdit>
#include <QLabel>
#include <QDesktopServices>
#include "../ReadFileDialog/ReadFileDialog.h" // 包含 ReadFileDialog 头文件
#include "../ToolParameterDialog/ToolParameterDialog.h" // 包含 ToolParameterDialog 头文件
#include "../FileListDialog/FileListDialog.h"
#include "../QGraphicsView/QGraphicsView.h"
#include "../ToolMover/ToolMover.h"
#include "../NCMain/NCMain.h" // 确保这个文件包含 CNCStateMachine 的定义

class MainWindow : public QMainWindow {
Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr, const QString &filePath = QString());
    ~MainWindow();
    void moveToolLine(const QPointF &startPoint, const QPointF &endPoint, double speed, double toolDiameter);
    void moveToolArc(const QPointF &startPoint, const QPointF &endPoint,const QPointF &CenterPoint, double speed, double toolDiameter);
    QString progreamFilePath;  // G代码路径
    void EXTS();

    // CAD界面
    CADView *cadView = nullptr;  // 创建CAD界面实例
    ToolMover *toolMover = nullptr; // 创建一个刀具的实例加到场景里边

signals:
    void nextLineRequested(); // 用于请求读取下一行代码

public slots:
    void toggleInterpolation();//开始运行的槽函数
    void parseNextLine(); // 解析下一行代码
    void setupConnections(); // 声明 setupConnections 函数

    // 信息框
    void addMessage(const QString &message);
    void clearMessages();
    void updateSpindleSpeed(double speed);
    void updateFeedRate(double feedRate);

    void updateXPosition(double x);
    void updateYPosition(double y);
    void updateZPosition(double z);


private slots:
    void handleFileSelected(const QString &filePath);  // 处理文件选择的槽函数
    void showReadFileDialog();  // 显示文件选择对话框
    void showToolParameterDialog(); // 显示刀具参数输入对话框
    void showFileListDialog();   // 显示文件列表对话框
    void openManual() {
        QString filePath = "NC Manual.html";  // 替换为你的文件路径
        QDesktopServices::openUrl(QUrl::fromLocalFile(filePath));
    }

private:
    std::vector<ToolMover*> toolMovers; // 存储ToolMover指针的容器
    QTextEdit *messageBox;

    QLabel
            *speed0Label,
            *speed1Label,
            *speed2Label,
            *speed3Label,
            *speed4Label;

    QPushButton *openWidgetButton; // 打开对话框按钮
    QPushButton *interpolationButton; // 插补功能按钮
    QChartView *chartView;           // 图表视图
    bool interpolationEnabled;        // 插补功能开关状态
    ReadFileDialog *widget;          // 文件读取对话框指针
    QPushButton *openFileListButton; // 新增的按钮指针

    // 显示刀轨
    bool centerPath = true;
    bool leftEdgePath = true;
    bool rightEdgePath = true;

    std::ifstream *gCodeStream;  // 用于读取G代码的流
    CNCStateMachine machine;      // CNC状态机对象
    NCCommand command();

    QList<QPair<QPointF, QPointF>> pathSegments; // 存储路径段
    void deleteLastToolMover();
    double convertSpeed(double speed) const;
    void setupMenuBar();
};

#endif // MAINWINDOW_H
